// #include <iostream>
// #include<vector>
// #include<algorithm>
// #include<list>
// #include <random>
// #include<numeric>
//
// using namespace std;
//
// //find find_if find_first_of adjacent_find  search  search_n
//
// void test_find()
// {
//     vector<int> num = {1,2,3,4,5,6};
//     auto it = find(num.begin(),num.end(),4);
//     if (it==num.end())
//     {
//         cout << "未找到指定数据" << endl;
//         return;
//     }
//
//     cout << "查找数据" << *it << endl;
//
//     // num.erase(it);
//
//     auto result  =  find_if(num.begin(),num.end(),[](const int& num){return num==5;});
//
//     if (result==num.end())
//     {
//         cout << "未找到指定数据" << endl;
//         return;
//     }
//
//     cout << "查找数据" << *it << endl;
//
//     num.erase(it);
//
//     string str = "IloveyouImissyou";
//     string pos = "miss";
//     auto it_str = search(str.begin(),str.end(),pos.begin(),pos.end());
//     if (it_str!=str.end())
//     {
//         cout << "存在" << endl;
//     }
//
//     int sum = count_if(num.begin(),num.end(),[](const int& num){return num>=3;});
//     cout << sum << endl;
//
//     //二分查找 有序数据
//     auto bit  =  binary_search(num.begin(),num.end(),2);
//     if (bit)
//     {
//         cout << "找到" << endl;
//     }
//
// }
//
// //排序和通用算法
// //sort
// //stable_sort:保持相对顺序的排序
// //merge: 归并排序 不会改变原容器数据
// // inplace_merge 归并排序 直接作用于原容器
// // nth_element: 关键字排序
// //partition 分类数据（按照特定条件把数据分为两堆）
// // stable_partion 保持数据相对顺序 分类处理
// //partial_sort 局部排序
// //partial_sort_copy: 局部排序结果放到新容器
// //random_shuffle 乱序算法
// //reverse 逆序
// //reverse_copy 逆序结果另存
// //rotate 移动元素到末位
// //rotate_copy:移位的结果另存
//
// void test_sort()
// {
//     vector<int> num = {1,2,32,5,2,3};
//     sort(num.begin(),num.end());
//     sort(num.begin(),num.end(),greater<int>());
//
//
//     list<int> value = {1,2,3,2,4,1};
//     value.sort(greater<int>());
//     // 创建一个随机数生成器
//     std::random_device rd;  // 用于获取随机种子
//     std::mt19937 g(rd());   // 以 rd() 作为种子初始化 Mersenne Twister 生成器
//
//     string str = {"ABCDEF1234567"};
//
//     shuffle(str.begin(),str.end(),g);
//     cout << "乱序" << str << endl;
// }
//
// void test_copy()
// {
//     vector<int> t = {1,2,3,4,5,6};
//     vector<int> result;
//     // result.resize(t.size());
//     // copy(t.begin(),t.end(),result.begin());
//     copy(t.begin(),t.end(),back_inserter(result));
//
//     for (auto& v:result)
//     {
//         cout << v  << endl;
//     }
// }
//
// /**
//  * set_union 并集
//  * set_interaction 交集
//  *set_diffrence  差集
//  */
// void test_union()
// {
//     vector<int> one  = {1,3,4,6};
//     vector<int> two = {4,6,8,7};
//     vector<int> result;
//     set_union(one.begin(),one.end(),two.begin(),two.end(),back_inserter(result));
//     for (auto& v:result)
//     {
//         cout << v  << endl;
//     }
//
//     vector<int> row = {1,2,3};
//     vector<int> cols = {4,5,6};
//     auto data = inner_product(row.begin(),row.end(),cols.begin(),cols.end());
//     cout << *data << endl;
//
// }
//
// void test_permutation()
// {
//
// }
//
// void test_numberic()
// {
//     vector<int> num = {1,2,3,4,5};
//     int value = 0;
//     int sum = accumulate(num.begin(),num.end(),value);
//     cout << sum <<endl;
//     vector<int> result;
//     partial_sum(num.begin(),num.end(),back_inserter(result));
//     for (auto& v:result)
//     {
//         cout << v  << endl;
//     }
//
// }
// void test_heap()
// {
//     vector<int> data = {1,8,10,2,10};
//     make_heap(data.begin(),data.end());
//     for (auto& v:data)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
//
//     while (!data.empty())
//     {
//         pop_heap(data.begin(),data.end()); //把要拿的数据放到最后面
//         cout <<data.back() << endl;
//         data.pop_back();
//         make_heap(data.begin(),data.end());
//     }
//
//     //堆排序 不能乱用排序准则 必须和创建一致
//     vector<int> sdata={1,2,42,3,2,45,2};
//     make_heap(sdata.begin(),sdata.end(),greater<int>());
//     sort_heap(sdata.begin(),sdata.end(),greater<int>());
//     for (auto& v:sdata)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
//
//
// }
//
//
// int main()
// {
//     srand((unsigned)time(nullptr));
//     // test_find();
//     // test_sort();
//     // test_copy();
//     // test_union();
// // test_numberic();
//     // test_permutation();
//     test_heap();
//     return 0;
// }